
#include <GL/glut.h>
#include <iostream>
#include <btBulletDynamicsCommon.h>

#include "debugOpenGL.h"

//
//#define SHOW_WARNING_DEBUG_OPENGL 1

namespace Fisica {
   void DebugOpenGL::noopWarning(const char* nombre) const {
      std::cerr << "El metodo \"" << nombre << "\" de DebugOpenGL ha sido llamado pero no esta implementado completamente (es una no-op). " << std::endl;
   }

   void DebugOpenGL::drawLine(const btVector3& from,
         const btVector3& to,const btVector3& color) {

      // XXX HACK para no dibujar las "normales"
      if(color.x() > .9 and color.y() > .9 and color.z() < .1)
         return

      glPushAttrib(GL_COLOR_BUFFER_BIT | GL_ENABLE_BIT);
      glDisable(GL_LIGHTING);
      glDisable(GL_CULL_FACE);
      glColor3f(color.x(), color.y(), color.z());

      glBegin(GL_LINE);
      glVertex3f(from.x(), from.y(), from.z());
      glVertex3f(to.x(), to.y(), to.z());
      glEnd();

      // XXX Bug!!! Esto no deberia ser necesario, pero lo es?!?
      glEnable(GL_LIGHTING);
      glEnable(GL_CULL_FACE);

      glPopAttrib();
   }

   void DebugOpenGL::drawContactPoint(const btVector3& PointOnB,
         const btVector3& normalOnB, btScalar distance, 
         int lifeTime,const btVector3& color) {
#ifdef SHOW_WARNING_DEBUG_OPENGL 
      noopWarning("drawContactPoint");
#endif
   }

   void DebugOpenGL::reportErrorWarning(const char* warningString) {
#ifdef SHOW_WARNING_DEBUG_OPENGL 
      noopWarning("reportErrorWarning");
#endif
   }

   void DebugOpenGL::draw3dText(const btVector3& location,const char* textString) {
#ifdef SHOW_WARNING_DEBUG_OPENGL 
      noopWarning("draw3dText");
#endif
   }

   void DebugOpenGL::setDebugMode(int debugMode) {
#ifdef SHOW_WARNING_DEBUG_OPENGL 
      noopWarning("setDebugMode");
#endif
   }

   int DebugOpenGL::getDebugMode() const {
#ifdef SHOW_WARNING_DEBUG_OPENGL 
      noopWarning("getDebugMode");
      std::cerr << "Retornando \"1\" como int." << std::endl;
#endif
      return 1;
   }
}

